<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        class Person {
            static myName = 'Personzzzz';
            static mySay = function(){
                console.log('我是一个静态方法');
            }

            constructor(name,age) {
                this.name = name;
                this.age = age;
            }

            say(){
                console.log('我是父类的'+this.name);
            }
        }

        // 使用extends关键字即可实现继承，继承会把父类中的所有属性和方法都继承过来。当然，包括静态属性和静态方法
        class Student extends Person{
            constructor(name,age,score){
                super(name,age);//name和age属性的初始化父类就已经写过了，可以通过super()关键字传过去
                this.score = score;//score是Student类自己扩展的属性，所以要在自己的构造器里初始化
            }

            // 静态属性和方法也是可以覆盖也就是重写的，这里就不演示了

            say(){//如果子类中的方法名和父类中的相同，那么会覆盖父类中的方法，也就是重写
                // 如果你想在子类中调用父类中的方法,可以这样
                super.say();//这样就调用了父类中的say方法
                console.log('我是子类中的'+this.name+', 我考了'+this.score+'分');
            }
        }

        let stu = new Student('mika',18,99);
        stu.say();
        Student.mySay();//可以看到父类中的静态方法也被继承了
        console.log(Student.myName);//可以看到父类中的静态属性也被继承了
    </script>
</body>

</html>